// //
// // Created by admin on 2025/9/24.
// //
//
// #include "demotwo.h"
//
// #include <iostream>
// #include <ostream>
//
// void test_cout() {
//     char name[20] = "cout";
//     int age =1;
//     double score  =1.11;
//     cout << age << "\n";
//     cout << score<< "\n";;
//     cout << name<< "\n";;
//     cout << 1<< "\n";;
//     cout << "姓名:" << name <<"年龄" << age<<"\n";
//     cout <<'a'<< endl;
//     cout <<'b'<< endl;
//
//     //IO流对象
//     cout.put('c');
//     cout <<'c'<< endl;
//     //c++也会出现跳过现象 清空缓冲物
//     //while (getchar() != '\n');
//     if (cin >> age) {
//         cout << age << "\n";
//     }else {
//         //返回非
//     }
//
// }
//
// void test_cin() {
//     char name[20];
//     int age;
//     cin >> name >> age;
//     cout << name << "\n";
//     cout << age<< "\n";;
// }
//
// void test_bool()
// {
//     //第一点 bool 类型是新类型
//     bool flag = true;
//
//     cout << "内存" << sizeof(bool) << endl;
//     flag  =123;
//     //非0值表示成立
//     cout <<flag <<endl;
// }
//
// void modify(int* a)
// {
//     *a = 1000;
// }
//
// void modify_two(int& data) //int& a =data;
// {
//     data = 2000;
// }
//
// void print_data(const int& data)
// {
//     //弊端 无法在这个函数中修改
//   cout << data << endl;
// }
//
// void print_data_two(int&& b)
// {
//     b=200;
//     cout << b << endl;
// }
//
// void test_reference()
// {
//     //第二个类型 引用类型
//
//     //理解起别名 同一段内存的两个不同的名字 弱化指针的存在
//     //引用类型必须赋值
//     //左值引用
//     int data = 123;
//     int& value = data; //类型& 标识符=左值
//     value = 999;
//     cout << data << ":" << value <<endl;
//
//     //存在于传参， 防止拷贝本产生
//     modify(&data);
//     cout << data << ":" << value <<endl;
//     modify_two(data);
//     cout << data << ":" << value <<endl;
//
//     //常量是右值 不行 下面代码是错误的
//     // int& const_value = 123;
//     //const int& const_value = 123; //老版本--> 函数传参中有一个弊端
//     //modify(123);//右值引用 没办法传变量
//     print_data(123);
//
//
//     //右值引用
//     //基本语法 类型&& 标识符 = 右值
//
//     int&& number = 123;
//     number = 12345; //提供可以修改的功能给你
//     print_data_two(455);
//
//     int num = 199;
//     //可以把左值转给右值 转交所有权 移动语义的时候
//     int&& r_num=move(num);
//     r_num = 999;
//     cout << r_num << endl;
//
//     /****
//      * 引用折叠
//      * 完美转发
//      * 移动语义
//      */
// }
//
// void test_null()
// {
//     int* p = NULL; //c语言可以当0来用
//
//
// }
// void print(int a)
// {
//
// }
//
// //引用折叠
// void test_type()
// {
//     typedef int&& type;
//
//     int age = 1;
//
//     //引用折叠
//     type& t1 = age; //  int&& &t1 type => 两个&& 折叠没有 int& t1 = age;
//     type&& t2 = 123; //int && t2 = 123;
// }
// struct Info
// {
//     char name[20];
//     int age;
// };
//
// namespace A
// {
//     namespace B
//     {
//         namespace C
//         {
//             struct Data
//             {
//                 int data;
//             };
//         }
//     }
// }
//
//
// A::B::C::Data get_value()
// {
//     A::B::C::Data data ={1};
//     return data;
//
// }
//
// //自动推断类型
// void test_auto()
// {
//     //auto -- 根据赋值类型推断 不能单独用auto 定义变量
//     auto a = 1;
//     Info info = {"abc",12};
//     auto pInfo = &info;
//
//     auto b = 1.1;
//
//     auto pstr = "i love you"; //pstr const char*
//
//     auto result = get_value();
//
//     //decltype
//
//     decltype(a) num; //decltype(a)-->int
//
//     decltype(result) number = {34};
//     //A::B::C::Data
//
// }
// //二义性问题 计算机是不会选择的
//
//
// //1. using namespace 的二义性问题
// namespace A
// {
//     int age;
// }
// namespace B
// {
//     int age;
// }
//
// void test_one()
// {
//     //防止命名污染
//     // using namespace A;
//     // using namespace B;
//     // cout <<age <<endl;
// }
//
// // void print_t(int a)
// // {
// //
// // }
// //
// // void print_t(int a,int b=0)
// // {
// //
// // }
//
// //新标准赋值操作 =可以省略 用{}
//
//
//
//
// int main()
// {
//     //二义性问题 让程序有多重可行选择
//
//
//     return 0;
// }
//
//
//
//
// // int main() {
// //     // test_cout();
// //     // test_cin();
// //     // test_bool();
// //     // test_reference();
// //     test_null();
// //     print(NULL);
// //     //nullptr 关键字 用来替换NULL
// //     int* ptr = nullptr;
// //     // nullptr_t ptr;
// //     return 0;
// // }
